Clojureと「Simple Made Easy」
Clojureのことを理解するには、作者であるRich Hickeyのプログラミング観を知るのが手っ取り早いでしょう。
具体的なコーディングについてのプレゼンというよりは、シンプルさとは何か?を語ったもの
Rich Hickeyの哲学
シンプルと簡単は違う
「簡単」というのは、だいたいが「ほかと比べて」という比較が入るのです。慣れているにせよ、身近であるにせよ、「今の自分の知ってる何かと比べて」という比較なのです。
実際には、ものごとをシンプルにすると、要素の数は多くなっていきます。
Richのいう「シンプル」というのは、「ひとつのものに、複数のことがらを混ぜ込まない」ということ
シンプルというのは、まっすぐの糸のようなもので、シンプルでないものというのは、糸が絡まっている状態です。
シンプルでなくなる = 「コンプレクト(complect)」
コンプレクトの例
変数も!
コンプレクトしているものは、複数の要素が、もはや切り離せないレベルで結合してしまっています。この、切り離せない、という事実が、複雑さの現れるところなのです。
シンプルなものは違います。シンプルなものは、組み合わせることができます。
さらに、簡単に分離できます。
シンプルなものは、絡み合っていないから、「簡単に」変更できるのです。
IMO:タイトル回収!
テストスイートとリファクタリングツールは、あくまでも「ガードレール」であって、ガードレールなしでも簡単に変更できる、もともとシンプルなものの代用にはなり得ないんです。
「シンプルであること」は、あなたの選択だ
プログラムをシンプルにするには抽象化しなければいけない
ものごとから、実装の詳細を取り除くことです。
そうすることで、ものごとは組み合わせ可能になって、たくさんのものを、共通の方法で扱えるようになります。LEGOブロックになるのです。